import CryptoJS from 'crypto-js'
import Cookies from "js-cookie";

/**
 * 验证码相关
 */
export function resetSize(vm: any) {
  let img_width, img_height, bar_width, bar_height 	// 图片的宽度、高度，移动条的宽度、高度

  const parentWidth = vm.$el.parentNode.offsetWidth || window.offsetWidth
  const parentHeight = vm.$el.parentNode.offsetHeight || window.offsetHeight

  if (vm.imgSize.width.indexOf('%') !== -1) {
    img_width = parseInt(vm.imgSize.width) / 100 * parentWidth + 'px'
  } else {
    img_width = vm.imgSize.width
  }

  if (vm.imgSize.height.indexOf('%') !== -1) {
    img_height = parseInt(vm.imgSize.height) / 100 * parentHeight + 'px'
  } else {
    img_height = vm.imgSize.height
  }

  if (vm.barSize.width.indexOf('%') !== -1) {
    bar_width = parseInt(vm.barSize.width) / 100 * parentWidth + 'px'
  } else {
    bar_width = vm.barSize.width
  }

  if (vm.barSize.height.indexOf('%') !== -1) {
    bar_height = parseInt(vm.barSize.height) / 100 * parentHeight + 'px'
  } else {
    bar_height = vm.barSize.height
  }

  return {imgWidth: img_width, imgHeight: img_height, barWidth: bar_width, barHeight: bar_height}
}

// 验证码相关
/**
 * @word 要加密的内容
 * @keyWord String  服务器随机返回的关键字
 */
export function aesEncrypt(word: any, keyWord = 'XwKsGlMcdPMEhR1B') {
  const key = CryptoJS.enc.Utf8.parse(keyWord)
  const srcs = CryptoJS.enc.Utf8.parse(word)
  const encrypted = CryptoJS.AES.encrypt(srcs, key, {mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7})
  return encrypted.toString()
}

/**
 * 数字的千分符格式化
 * @param value 数字
 * @param scale 格式化多少位小数
 */
export function formatThousand(value, scale = 0) {
  if (!value) {
    if (value === 0 || value === '0') {
      return 0
    }
    return '-'
  }
  value = (scale === 0 ? value >> 0 : value.toFixed(scale)) + ''
  if (!value.includes('.')) {
    value += '.'
  }
  return value.replace(/(\d)(?=(\d{3})+\.)/g, function($0, $1) {
    return $1 + ','
  }).replace(/\.$/, '')
}

/**
 * 金额阿拉伯数字转大写
 */
export function numToChinese(money: any) {
  // 汉字的数字
  const cnNums = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']
  // 基本单位
  const cnIntRadice = ['', '拾', '佰', '仟']
  // 对应整数部分扩展单位
  const cnIntUnits = ['', '万', '亿', '兆']
  // 对应小数部分单位
  const cnDecUnits = ['角', '分']
  // 整数金额时后面跟的字符
  const cnInteger = '整'
  // 整型完以后的单位
  const cnIntLast = '元'
  // 最大处理的数字
  const maxNum = 9999999999999999.99
  // 金额整数部分
  let integerNum
  // 金额小数部分
  let decimalNum
  // 输出的中文金额字符串
  let chineseStr = ''
  // 分离金额后用的数组，预定义
  let parts
  if (money == null) {
    return ''
  }
  if(money === 0 || money == ''){
    return '零元整'
  }
  money = parseFloat(money)
  if (money >= maxNum) {
    // 超出最大处理数字
    return ''
  }
  if (money === 0) {
    chineseStr = cnNums[0] + cnIntLast + cnInteger
    return chineseStr
  }
  // 转换为字符串
  money = money.toString()
  if (money.indexOf('.') === -1) {
    integerNum = money

    decimalNum = ''
  } else {
    parts = money.split('.')
    integerNum = parts[0]
    decimalNum = parts[1].substr(0, 4)
  }
  // 获取整型部分转换
  if (parseInt(integerNum, 10) > 0) {
    let zeroCount = 0
    const IntLen = integerNum.length
    for (let i = 0; i < IntLen; i++) {
      const n = integerNum.substr(i, 1)
      const p = IntLen - i - 1
      const q = p / 4
      const m = p % 4
      if (n === '0') {
        zeroCount++
      } else {
        if (zeroCount > 0) {
          chineseStr += cnNums[0]
        }
        // 归零
        zeroCount = 0
        // alert(cnNums[parseInt(n)])
        chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]
      }
      if (m === 0 && zeroCount < 4) {
        chineseStr += cnIntUnits[q]
      }
    }
    chineseStr += cnIntLast
  }
  // 小数部分
  if (decimalNum !== '') {
    const decLen = decimalNum.length
    for (let i = 0; i < decLen; i++) {
      const n = decimalNum.substr(i, 1)
      if (n !== '0') {
        chineseStr += cnNums[Number(n)] + cnDecUnits[i]
      }
    }
  }
  if (chineseStr === '') {
    chineseStr += cnNums[0] + cnIntLast + cnInteger
  } else if (decimalNum === '') {
    chineseStr += cnInteger
  }
  return chineseStr

}


/**
 * 文件大小转换显示
 * @param size
 * @returns
 */
export function convertToFileSize(size) {
    if (size < 1024 ) {
        return size + " KB"
    }
    else if (1024 <= size && size < 1048576) {
        return (size / 1024).toFixed(2) + ' MB'
    }
    else if (1048576 <= size && size < 1151022592) {
        return (size / 1048576).toFixed(2) + " GB"
    }
    return size;
}


/**
 * 文件格式判断,返回对应的文件类型 判断图标用
 * @param fileName model
 * @returns
 */
export function getFileTypeByIcon(fileName) {
  // 后缀获取
  var suffix = ''
  // 获取类型结果
  var result;
  try {
    var flieArr = fileName.split('.')
    suffix = flieArr[flieArr.length - 1]
  } catch (err) {
    suffix = ''
  }
  // fileName无后缀返回 文件夹
  if (!suffix) {
    result = '#icon-yellowFolder'
    return result
  }else{
    suffix = suffix.toLowerCase()
  }
  // 图片格式
  var imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif','webp']
  // 进行图片匹配
  result = imglist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-image'
    return result
  }
  // 匹配txt
  var txtlist = ['txt']
  result = txtlist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-txtwenjian'
    return result
  }
  // 匹配 word,pdf,ppt,xls 等文档类型
  var wordlist = ['doc', 'docx']
  result = wordlist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-word'
    return result
  }
  // 匹配 word,pdf,ppt,xls 等文档类型
  var pptlist = ['ppt','pptx']
  result = pptlist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-powerpoint'
    return result
  }
  // 匹配 word,pdf,ppt,xls 等文档类型
  var pdflist = ['pdf']
  result = pdflist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-pdf'
    return result
  }
  // 匹配 word,pdf,ppt,xls 等文档类型
  var xlslist = ['xls', 'xlsx']
  result = xlslist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-excel'
    return result
  }
  // 匹配 视频
  var videolist = ['mp4', 'm2v', 'mkv']
  result = videolist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-video'
    return result
  }
  // 匹配 音频
  var radiolist = ['mp3', 'wav', 'wmv']
  result = radiolist.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-audio'
    return result
  }
  // html
  var html = ['html']
  result = html.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = '#icon-HTML'
    return result
  }
  // 其他 文件类型
  result = '#icon-file'
  return result
}


/**
 * 文件格式判断,返回对应的文件类型 上传用
 * @param fileName
 * @returns
 */
export function getFileTypeByUpLoad(fileName) {
  // 后缀获取
  var suffix = ''
  try {
    var flieArr = fileName.split('.')
    suffix = flieArr[flieArr.length - 1]
  } catch (err) {
    suffix = ''
  }
  // fileName无后缀返回 false
  if (!suffix) {
    return false
  }

  if (suffix == 'jpg' || suffix == 'jpeg'){
    return '1'
  }else if(suffix == 'png'){
    return '2'
  }else if(suffix == 'gif'){
    return '3'
  }else if(suffix == 'xls' || suffix == 'xlsx'){
    return '4'
  }else if(suffix == 'doc' || suffix == 'docx'){
    return '5'
  }else if(suffix == 'pdf'){
    return '6'
  }else if(suffix == 'ppt'){
    return '7'
  }else if(suffix == 'txt'){
    return '8'
  }else if(suffix == 'html'){
    return '9'
  }else if(suffix == 'svg'){
    return '10'
  }else if(suffix == 'dtd'){
    return '11'
  }else if(suffix == 'mp3'){
    return '12'
  }else if(suffix == 'mp4'){
    return '13'
  }else{
    //其他
    return '14'
  }

}

/**
 * 正则判断是否包含特殊字符
 * @param val
 * @returns
 */
export function isImage(val) {
  var re = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im;//只能输入汉字和英文字母和数字
  if (re.test(val)) {
    return false;
  } else {
    return true;
  }
}


/**
 * 正则判断是否包含特殊字符
 * @param val
 * @returns 包含特殊字符返回->false
 */
export function checkVal(val) {
  var re = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im;//只能输入汉字和英文字母和数字
  if (re.test(val)) {
    return false;
  } else {
    return true;
  }
}


/**
 * 判断office文档类型
 * @param suffix
 * @returns
 */
export function getDocumentType(suffix) {
  var result

  var wordList = ['doc', 'docm', 'docx', 'docxf', 'dot', 'dotm', 'dotx', 'epub', 'fodt', 'fb2', 'htm', 'html', 'mht', 'odt', 'oform', 'ott', 'oxps', 'pdf', 'rtf', 'txt', 'djvu', 'xml', 'xps']
  result = wordList.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = 'word'
    return result
  }

  var cellList = ['csv', 'fods', 'ods', 'ots', 'xls', 'xlsb', 'xlsm', 'xlsx', 'xlt', 'xltm', 'xltx']
  result = cellList.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = 'cell'
    return result
  }

  var slideList = ['fodp', 'odp', 'otp', 'pot', 'potm', 'potx', 'pps', 'ppsm', 'ppsx', 'ppt', 'pptm', 'pptx']
  result = slideList.some(function (item) {
    return item == suffix
  })
  if (result) {
    result = 'slide'
    return result
  }

  return null;
}

/**
 * 解析关联数据
 * @param label
 * @returns
 */
export function analysisAssociation(label) {
  if(label != null || label !== ''){
    let array = label.split("/")
    return array[0]
  }else{
    return null;
  }
}


/**
 * TODO 他暂时只是一个遍历,具体等后台接口数据到了之后再做修改
 * 解构部门树状数据
 * @param treeData
 * @param level
 * @returns
 */
export function structureDepartmentData(treeData,level) {
  treeData.forEach((item) => {
    if(item.hasOwnProperty("username")){
      //判断是否是用户选项
      item["isUser"] = 1  //是
    }else{
      item["isUser"] = 0  //否
    }

    if (item.children && item.children.length > 0) {
      //存在子节点,则把sysUsers 复制到 children
      if(item.hasOwnProperty("sysUsers")){
        item.sysUsers.forEach(userItem=>{
          //复制一个name 方便显示
          userItem["name"] = userItem.nickname
        })
        item.children = item.children.concat(item.sysUsers)
      }
      item['level'] = level
      const temp = structureDepartmentData(item.children,level + 1 )
    }else{
      //不存在子节点,判断是否是部门
      if(item["isUser"] === 0){
        //是部门则把sysUsers复制一份到 children
        if(item.hasOwnProperty("sysUsers")){
          item.sysUsers.forEach(userItem=>{
            //复制一个name 方便显示
            userItem["name"] = userItem.nickname
          })
          item["children"] = item.sysUsers
        }
      }
      item['level'] = level
    }
  })
  return treeData
}

